#!/usr/bin/env python3
"""
APP自动化测试框架演示脚本
展示基本功能的使用方法
"""

import os
import sys
import time
from datetime import datetime

# 添加项目路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from utils.driver_manager import DriverManager
from page_objects.login_page import LoginPage


def demo_basic_functionality():
    """演示基本功能"""
    print("🚀 APP自动化测试框架演示")
    print("=" * 50)
    
    # 初始化驱动管理器
    print("1. 初始化驱动管理器...")
    driver_manager = DriverManager(platform="android")
    
    try:
        # 启动驱动
        print("2. 启动Appium驱动...")
        driver_manager.start_driver()
        
        # 初始化登录页面
        print("3. 初始化登录页面...")
        login_page = LoginPage(driver_manager)
        
        # 等待页面加载
        print("4. 等待页面加载...")
        if login_page.wait_for_page_load():
            print("✅ 页面加载成功")
        else:
            print("❌ 页面加载失败")
            return
        
        # 演示基本操作
        print("\n5. 演示基本操作...")
        
        # 检查页面元素
        print("   - 检查页面元素可见性...")
        elements_to_check = [
            ("用户名输入框", login_page.USERNAME_INPUT),
            ("密码输入框", login_page.PASSWORD_INPUT),
            ("登录按钮", login_page.LOGIN_BUTTON)
        ]
        
        for element_name, locator in elements_to_check:
            if login_page.is_element_present(*locator):
                print(f"   ✅ {element_name}可见")
            else:
                print(f"   ❌ {element_name}不可见")
        
        # 演示输入操作
        print("\n   - 演示输入操作...")
        test_username = "demo_user"
        test_password = "demo_pass"
        
        if login_page.enter_username(test_username):
            print(f"   ✅ 输入用户名: {test_username}")
        else:
            print(f"   ❌ 输入用户名失败")
        
        if login_page.enter_password(test_password):
            print(f"   ✅ 输入密码: {test_password}")
        else:
            print(f"   ❌ 输入密码失败")
        
        # 演示点击操作
        print("\n   - 演示点击操作...")
        if login_page.click_login_button():
            print("   ✅ 点击登录按钮成功")
        else:
            print("   ❌ 点击登录按钮失败")
        
        # 等待响应
        time.sleep(2)
        
        # 演示获取文本
        print("\n   - 演示获取文本...")
        username_text = login_page.get_text(*login_page.USERNAME_INPUT)
        print(f"   📝 用户名输入框内容: {username_text}")
        
        # 演示截图
        print("\n   - 演示截图功能...")
        screenshot_path = login_page.take_screenshot("demo_screenshot.png")
        if screenshot_path:
            print(f"   📸 截图已保存: {screenshot_path}")
        else:
            print("   ❌ 截图失败")
        
        # 演示滑动操作
        print("\n   - 演示滑动操作...")
        print("   👆 向上滑动...")
        login_page.swipe_up()
        time.sleep(1)
        
        print("   👇 向下滑动...")
        login_page.swipe_down()
        time.sleep(1)
        
        print("   👈 向左滑动...")
        login_page.swipe_left()
        time.sleep(1)
        
        print("   👉 向右滑动...")
        login_page.swipe_right()
        
        print("\n✅ 基本功能演示完成!")
        
    except Exception as e:
        print(f"❌ 演示过程中出现错误: {e}")
    
    finally:
        # 关闭驱动
        print("\n6. 关闭驱动...")
        driver_manager.quit_driver()
        print("✅ 驱动已关闭")


def demo_login_scenarios():
    """演示登录场景"""
    print("\n🔐 登录场景演示")
    print("=" * 50)
    
    driver_manager = DriverManager(platform="android")
    
    try:
        driver_manager.start_driver()
        login_page = LoginPage(driver_manager)
        
        if not login_page.wait_for_page_load():
            print("❌ 页面加载失败")
            return
        
        # 测试场景1: 有效登录
        print("\n1. 测试有效登录场景...")
        login_page.clear_login_form()
        if login_page.login("admin", "admin123"):
            print("   ✅ 登录操作执行成功")
            time.sleep(2)
            if login_page.is_success_message_displayed():
                print("   ✅ 登录成功消息显示")
            else:
                print("   ❌ 登录成功消息未显示")
        else:
            print("   ❌ 登录操作执行失败")
        
        # 测试场景2: 无效登录
        print("\n2. 测试无效登录场景...")
        login_page.clear_login_form()
        if login_page.login("invalid", "wrong"):
            print("   ✅ 登录操作执行成功")
            time.sleep(2)
            if login_page.is_error_message_displayed():
                print("   ✅ 登录错误消息显示")
            else:
                print("   ❌ 登录错误消息未显示")
        else:
            print("   ❌ 登录操作执行失败")
        
        # 测试场景3: 空用户名
        print("\n3. 测试空用户名场景...")
        login_page.clear_login_form()
        if login_page.login("", "password"):
            print("   ✅ 登录操作执行成功")
            time.sleep(2)
            if login_page.is_error_message_displayed():
                print("   ✅ 错误消息显示")
            else:
                print("   ❌ 错误消息未显示")
        else:
            print("   ❌ 登录操作执行失败")
        
        print("\n✅ 登录场景演示完成!")
        
    except Exception as e:
        print(f"❌ 登录场景演示出错: {e}")
    
    finally:
        driver_manager.quit_driver()


def demo_ui_testing():
    """演示UI测试"""
    print("\n🎨 UI测试演示")
    print("=" * 50)
    
    driver_manager = DriverManager(platform="android")
    
    try:
        driver_manager.start_driver()
        login_page = LoginPage(driver_manager)
        
        if not login_page.wait_for_page_load():
            print("❌ 页面加载失败")
            return
        
        # UI元素可见性测试
        print("\n1. UI元素可见性测试...")
        ui_elements = [
            ("用户名输入框", login_page.USERNAME_INPUT),
            ("密码输入框", login_page.PASSWORD_INPUT),
            ("登录按钮", login_page.LOGIN_BUTTON),
            ("忘记密码链接", login_page.FORGOT_PASSWORD_LINK),
            ("注册链接", login_page.REGISTER_LINK)
        ]
        
        for element_name, locator in ui_elements:
            if login_page.is_element_present(*locator):
                print(f"   ✅ {element_name}可见")
            else:
                print(f"   ❌ {element_name}不可见")
        
        # UI元素文本测试
        print("\n2. UI元素文本测试...")
        expected_texts = {
            "登录按钮": "登录",
            "忘记密码链接": "忘记密码",
            "注册链接": "注册账号"
        }
        
        for element_name, expected_text in expected_texts.items():
            if element_name == "登录按钮":
                actual_text = login_page.get_text(*login_page.LOGIN_BUTTON)
            elif element_name == "忘记密码链接":
                actual_text = login_page.get_text(*login_page.FORGOT_PASSWORD_LINK)
            elif element_name == "注册链接":
                actual_text = login_page.get_text(*login_page.REGISTER_LINK)
            
            if expected_text in actual_text:
                print(f"   ✅ {element_name}文本正确: {actual_text}")
            else:
                print(f"   ❌ {element_name}文本不匹配: 期望'{expected_text}', 实际'{actual_text}'")
        
        # UI响应性测试
        print("\n3. UI响应性测试...")
        
        # 快速输入测试
        test_text = "quicktest"
        for char in test_text:
            login_page.enter_username(char)
            time.sleep(0.1)
        
        final_text = login_page.get_text(*login_page.USERNAME_INPUT)
        if test_text in final_text:
            print("   ✅ 快速输入测试通过")
        else:
            print("   ❌ 快速输入测试失败")
        
        # 快速点击测试
        for i in range(3):
            if login_page.click_login_button():
                print(f"   ✅ 第{i+1}次点击成功")
            else:
                print(f"   ❌ 第{i+1}次点击失败")
            time.sleep(0.5)
        
        print("\n✅ UI测试演示完成!")
        
    except Exception as e:
        print(f"❌ UI测试演示出错: {e}")
    
    finally:
        driver_manager.quit_driver()


def main():
    """主函数"""
    print("🎯 APP自动化测试框架演示程序")
    print("=" * 60)
    print(f"⏰ 开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    
    try:
        # 演示基本功能
        demo_basic_functionality()
        
        # 演示登录场景
        demo_login_scenarios()
        
        # 演示UI测试
        demo_ui_testing()
        
        print("\n🎉 所有演示完成!")
        print("=" * 60)
        print("📚 更多信息请查看 USAGE.md 文件")
        print("🔧 运行测试请使用: python run_tests.py --action all")
        
    except KeyboardInterrupt:
        print("\n⚠️ 演示被用户中断")
    except Exception as e:
        print(f"\n💥 演示过程中出现错误: {e}")
    
    print(f"\n⏰ 结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")


if __name__ == "__main__":
    main() 